<?php
/**
 * HTTP请求通用函数库
 * 提供获取请求参数、请求方法、请求URL等功能
 */
namespace core;

class Request {
    /**
     * 获取请求参数
     * @param string $name 参数名
     * @param mixed $default 默认值
     * @return mixed
     */
    public static function getParam($name, $default = null) {
        $params = $_GET + $_POST;
        return isset($params[$name]) ? $params[$name] : $default;
    }

    /**
     * 获取请求方法
     * @return string
     */
    public static function getMethod() {
        return $_SERVER['REQUEST_METHOD'];
    }

    /**
     * 获取请求URL
     * @return string
     */
    public static function getUrl() {
        return $_SERVER['REQUEST_URI'];
    }

    /**
     * 获取请求IP
     * @return string
     */
    public static function getIp() {
        return $_SERVER['REMOTE_ADDR'];
    }

    /**
     * 获取请求头信息
     * @return array
     */
    public static function getHeaders() {
        return getallheaders();
    }

    /**
     * 获取请求参数
     * @return array
     */
    public static function getParams() {
        return $_GET + $_POST;
    }

    /**
     * 安全获取 GET 参数
     * @param string $name 参数名
     * @param mixed $default 默认值
     * @param bool $sanitize 是否进行安全过滤
     * @return mixed
     */
    public static function getParamStrict($name, $default = null, $sanitize = true) {
        if (!isset($_GET[$name])) {
            return $default;
        }

        $value = $_GET[$name];

        // 如果需要安全过滤
        if ($sanitize) {
            // 针对字符串类型进行转义
            if (is_string($value)) {
                $value = htmlspecialchars($value, ENT_QUOTES, 'UTF-8');
            }
            // 针对数组类型递归处理
            elseif (is_array($value)) {
                foreach ($value as $key => $item) {
                    $value[$key] = self::getParamStrict($key, $item, true);
                }
            }
        }

        return $value;
    }
}
